#ifndef ROUTE_SERVICE_H
#define ROUTE_SERVICE_H

#include <QObject>
#include <QList>
#include <QGeoCoordinate>
#include <QVariantList>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

/**
 * @brief 路线规划服务类
 * 
 * 提供路线规划功能，支持多种路线服务API
 * 包括起点、途经点、终点的路线计算
 */
class RouteService : public QObject
{
    Q_OBJECT

public:
    explicit RouteService(QObject *parent = nullptr);
    ~RouteService();

    /**
     * @brief 请求路线规划
     * @param waypoints 站点列表，格式：[{lat: double, lng: double, type: string}, ...]
     */
    Q_INVOKABLE void requestRoute(const QVariantList& waypoints);

    /**
     * @brief 设置路线服务提供商
     * @param provider 服务提供商名称 ("google", "bing", "osm")
     */
    Q_INVOKABLE void setRouteProvider(const QString& provider);

    /**
     * @brief 获取当前路线服务提供商
     */
    Q_INVOKABLE QString getRouteProvider() const;

    /**
     * @brief 清除当前路线
     */
    Q_INVOKABLE void clearRoute();

signals:
    /**
     * @brief 路线规划完成信号
     * @param path 路线坐标点列表，格式：[{lat: double, lng: double}, ...]
     */
    void routeReady(const QVariantList& path);

    /**
     * @brief 路线规划失败信号
     * @param error 错误信息
     */
    void routeError(const QString& error);

    /**
     * @brief 路线规划进度信号
     * @param progress 进度百分比 (0-100)
     */
    void routeProgress(int progress);

private slots:
    void onRouteReplyFinished();
    void onRouteReplyError(QNetworkReply::NetworkError error);

private:
    /**
     * @brief 构建路线请求URL
     * @param coordinates 坐标列表
     * @return 请求URL
     */
    QString buildRouteUrl(const QList<QGeoCoordinate>& coordinates);

    /**
     * @brief 解析路线响应数据
     * @param data 响应数据
     * @return 路线坐标点列表
     */
    QVariantList parseRouteResponse(const QByteArray& data);

    /**
     * @brief 解析Google路线响应
     */
    QVariantList parseGoogleRoute(const QJsonObject& response);

    /**
     * @brief 解析OpenRouteService路线响应
     */
    QVariantList parseOSMRoute(const QJsonObject& response);

    /**
     * @brief 解析Bing路线响应
     */
    QVariantList parseBingRoute(const QJsonObject& response);

private:
    QNetworkAccessManager* m_networkManager;
    QString m_routeProvider;
    QString m_apiKey;
    
    // 路线服务API端点
    static const QString GOOGLE_ROUTE_API;
    static const QString OSM_ROUTE_API;
    static const QString BING_ROUTE_API;
};

#endif // ROUTE_SERVICE_H

